import matplotlib.pyplot as plt  # 引入matplotlib.pyplot用于绘图
from pathlib import Path  # 引入Path类用于处理文件路径
from matplotlib.pyplot import show  # 引入show函数用于显示绘制的图形

from src.config.config import Config  # 引入配置类Config
from src.config.config_plotting import PlotConfig  # 引入绘图配置类PlotConfig
from src.plotting.plot_distance_sweep_testing_graph import plot_distance_sweep_testing_graph  # 引入绘图函数

if __name__ == '__main__':

    # 创建配置对象
    cfg = Config()
    plot_cfg = PlotConfig()

    # 设置字体为无衬线字体
    plt.rc('font', family='sans-serif')  # 字体设置选项: ['serif', 'sans-serif', 'monospace']

    # 定义数据路径列表，包含需要绘制的数据文件路径
    data_paths = [
        Path(cfg.output_metrics_path,
             'sat_2_ant_4_usr_3_satdist_10000_usrdist_1000', 'distance_sweep',
             'testing_mmse_sweep_970.0_1029.9899999999454.gzip'),

        Path(cfg.output_metrics_path,
             'sat_2_ant_4_usr_3_satdist_10000_usrdist_1000', 'distance_sweep',
             'testing_sac_error_0.0_userwiggle_30_snap_3.580_sweep_970.0_1029.9899999999454.gzip'),
        Path(cfg.output_metrics_path,
             'sat_2_ant_4_usr_3_satdist_10000_usrdist_1000', 'distance_sweep',
             'testing_mrc_sweep_970.0_1029.9899999999454.gzip'),
    ]

    # 设置图形的宽度和高度
    plot_width = 0.99 * 2.67  # 图形宽度为2.67的99%
    plot_height = plot_width * 2 / 3  # 图形高度按照宽度比例设置

    # 设置图例、标记样式、颜色和线型
    plot_legend = ['MMSE', 'SAC1', 'OMA']  # 图例标签
    plot_markerstyle = ['o', 's', '^']  # 标记样式：圆圈、方形、三角形
    plot_colors = [plot_cfg.cp2['blue'], plot_cfg.cp2['magenta'], plot_cfg.cp2['black']]  # 图形颜色
    plot_linestyles = ['-', '-', '--']  # 线型：实线、实线、虚线

    # 调用绘图函数，生成距离扫描测试图
    plot_distance_sweep_testing_graph(
        paths=data_paths,  # 数据文件路径
        name='distance_sweep_small_presentation',  # 图形名称
        width=plot_width,  # 图形宽度
        height=plot_height,  # 图形高度
        legend=plot_legend,  # 图例标签
        colors=plot_colors,  # 图形颜色
        markerstyle=plot_markerstyle,  # 标记样式
        linestyles=plot_linestyles,  # 线型
        plots_parent_path=plot_cfg.plots_parent_path,  # 图形保存路径
    )
    
    show()  # 显示绘制的图形
